package com.mall.mymall.common;

import com.baomidou.mybatisplus.annotation.IdType;
import com.baomidou.mybatisplus.generator.AutoGenerator;
import com.baomidou.mybatisplus.generator.config.DataSourceConfig;
import com.baomidou.mybatisplus.generator.config.GlobalConfig;
import com.baomidou.mybatisplus.generator.config.PackageConfig;
import com.baomidou.mybatisplus.generator.config.StrategyConfig;
import com.baomidou.mybatisplus.generator.config.rules.NamingStrategy;

/**
 * 自动代码生成器
 */
public class AutoMapper {

    public static void main(String[] args) {
        // 创建代码生成器
        AutoGenerator ag = new AutoGenerator();

        // 设置全局配置
        GlobalConfig gc = new GlobalConfig();
        // 设置代码的生成位置（磁盘目录）
        String path = System.getProperty("user.dir");
        gc.setOutputDir(path + "/src/main/java");
        // 设置生成的作者
        gc.setAuthor("十里坡");
        // 设置生成的类名
        gc.setMapperName("%sMapper");
        gc.setServiceName("%sService");
        gc.setServiceImplName("%sServiceImpl");
        gc.setControllerName("%sController");
        // 设置主键id的配置
        gc.setIdType(IdType.AUTO);
        // 将全局配置信息提交给代码生成器
        ag.setGlobalConfig(gc);

        // 设置数据源DataSource
        DataSourceConfig ds = new DataSourceConfig();
        ds.setDriverName("com.mysql.cj.jdbc.Driver");
        ds.setUrl("jdbc:mysql://localhost:3306/shopping_system?useUnicode=true&characterEncoding=UTF-8&useJDBCCompliantTimezoneShift=true&useLegacyDatetimeCode=false&serverTimezone=GMT%2B8");
        ds.setUsername("root");
        ds.setPassword("123456");
        // 将数据源信息提交给代码生成器
        ag.setDataSource(ds);

        // 设置Package包
        PackageConfig pc = new PackageConfig();
        // 设置生成的父级包、当前包
        pc.setModuleName("generate");
        pc.setParent("com.mall.mymall");
        // 将包信息提交给代码生成器
        ag.setPackageInfo(pc);

        // 设置策略信息
        StrategyConfig sc = new StrategyConfig();
        // 设置数据库表的命名规则：支持驼峰命名法
        sc.setNaming(NamingStrategy.underline_to_camel);
        // 设置数据库表中字段的命名规则，支持驼峰命名法
        sc.setColumnNaming(NamingStrategy.underline_to_camel);
        // 将策略信息提交给代码生成器
        ag.setStrategy(sc);

        // 执行代码的生成
        ag.execute();
    }
}
